// Loesung_von_Aufgabe_5.6_1_Fadenpendel

// Bestimmung der Fallbeschleunigung mittels eines ebenen Fadenpendels

float ws = 45.0; // Startwinkel in Grad
float wz; // Winkelzunahme
float w; // Winkel
float d; // Faktor zur Berechnung der Winkelzunahme
float l = 2.0; // Länge in m
float lP = 200; // Länge in Pixel für die Zeichnung
float g1 = 9.80665; // Normalfallbeschleunigung in ms^-2
float T; // Schwingungsdauer in Sekunden über Reihenentwicklung berechnet
float g2; // // Normalfallbeschleunigung in ms^-2 mit einfacher Gleichung berechnet 
float a; // Abweichung in Prozent
float x;
float y;

void setup()
{
  size(600, 400);
}

void draw()
{
  background(255);
  translate(300, 50);
  frameRate(60);

  // Berechnung der genauen Schwingungsdauer T
  T = 2*PI*sqrt(l/g1)*(1.0 + pow(1.0/2.0, 2)*pow(sin(radians(ws/2)), 2) + pow((3.0/8.0), 2)*pow(sin(radians(ws/2)), 4) + pow((15.0/48.0), 2)*pow(sin(radians(ws/2)), 6));

  // Berechnung der Fallbeschleunigung mittels der Formel T = 2*PI*Wurzel(l/g2)
  g2 = 4*PI*PI*l/(T*T);

  // Berechnung der prozentualen Abweichung in Prozent
  a = (float)round(1000*(100*(g1-g2)/g1))/1000; 

  // Fadenpandel wird gezeichnet und animiert
  d = 360/frameRate;
  wz = wz + d/T;
  w = ws*cos(radians(wz));
  x = lP*sin(radians(w));
  y = lP*cos(radians(w));
  line(0, 0, x, y);
  fill(0);
  ellipse(0, 0, 7, 7);
  fill(255, 0, 0);
  ellipse(x, y, 20, 20);

  // Beschriftung
  fill(#1848F0);
  textSize(20);
  textAlign(CENTER);
  text("Normalfallbeschleunigung in ms^-2 = " +g1, 0, 250);
  text("gemessene Fallbeschleunigung in ms^-2 = " +(float)round(100000*g2)/100000, 0, 300);
  fill(0);
  text("Startwinkel in Grad = " +ws, 0, 275);
  text("Abweichung in % = " +a, 0, 325);
}